﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JPSOFTWARE.BON.Modelos;
using JPSOFTWARE.BON.Repositorio;
using System.Web;
using System.Net.Mail;
using Modelos;

namespace JPSOFTWARE.BON.Regra
{
    public class RnProdutos : RnBase
    {
        public Retorno RegistrarProdutos(RegistrarProdutosModel registrarProdutosModel)
        {
            Retorno retorno = new Retorno();
            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().RegistrarProduto(registrarProdutosModel);

                if (retorno.Sucesso)
                {
                    retorno.Sucesso = true;
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_006;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        //public List<ProdutosView> ListarProdutos()
        //{
        //    List<ProdutosView> lista = new List<ProdutosView>();
        //    try
        //    {
        //        lista = FabricaRepositorio.RepositorioProdutos().ListarProdutos();
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    return lista;
        //}

        public Retorno ListarProdutos(int IdDistribuidora)
        {
            Retorno retorno = new Retorno();
            List<ProdutosView> lista = new List<ProdutosView>();
            try
            {
                lista = FabricaRepositorio.RepositorioProdutos().ListarProdutos(IdDistribuidora);
                if (lista.Count > 0)
                {
                    retorno.Objeto = lista;
                    retorno.Sucesso = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public Retorno ListarProdutosInicial(int IdDistribuidora, int IdProduto)
        {
            Retorno retorno = new Retorno();
            List<ProdutosView> lista = new List<ProdutosView>();
            try
            {
                lista = FabricaRepositorio.RepositorioProdutos().ListarProdutosInicial(IdDistribuidora, IdProduto);
                if (lista.Count > 0)
                {
                    retorno.Objeto = lista;
                    retorno.Sucesso = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public Retorno ListarProdutosInicial(int IdDistribuidora)
        {
            Retorno retorno = new Retorno();
            List<ProdutosView> lista = new List<ProdutosView>();
            try
            {
                lista = FabricaRepositorio.RepositorioProdutos().ListarProdutosInicial(IdDistribuidora);
				
                if (lista.Count > 0)
                {                   
                    retorno.Objeto = lista;
                    retorno.Sucesso = true;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public ProdutosView ListarProduto(int IdProduto)
        {
            ProdutosView produtosView = new ProdutosView();
            try
            {
                produtosView = FabricaRepositorio.RepositorioProdutos().ListarProduto(IdProduto);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return produtosView;
        }

        public Retorno AlterarProduto(int IdProduto, int IdDistribuidora)
        {
            Retorno retorno = new Retorno();

            try
            {
                retorno.Objeto = FabricaRepositorio.RepositorioProdutos().AlterarProduto(IdProduto, IdDistribuidora);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_004;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return retorno;
        }

        public Retorno AlterarProduto(AlterarProdutosModel alterarProdutoModel)
        {
            Retorno retorno = new Retorno();

            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().AlterarProduto(alterarProdutoModel);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_004;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return retorno;
        }

        public Retorno ExcluirProdutoAdministrar(int IdProduto)
        {
            Retorno retorno = new Retorno();
            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().ExcluirProdutoAdministrar(IdProduto);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_004;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public Retorno ExcluirProduto(int IdProduto)
        {
            Retorno retorno = new Retorno();
            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().ExcluirProduto(IdProduto);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_004;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public List<ProdutosView> ListarProdutoGerenciar(int IdProduto)
        {
            List<ProdutosView> lista = new List<ProdutosView>();
            Retorno retorno = new Retorno();

            return lista = FabricaRepositorio.RepositorioProdutos().ListarProdutoGerenciar(IdProduto);
        }

        public List<ProdutosView> ListarTodosProdutos()
        {
            List<ProdutosView> lista = new List<ProdutosView>();
            Retorno retorno = new Retorno();

            return lista = FabricaRepositorio.RepositorioProdutos().ListarTodosProdutos();
        }

        public Categoria ListarCategoria(int IdCategoria)
        {
            ValidarId(IdCategoria);
            try
            {
                return FabricaRepositorio.RepositorioProdutos().ListarCategoria(IdCategoria);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Categoria> ListarCategoria()
        {
            List<Categoria> lista = new List<Categoria>(100);

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ListarCategoria();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public ProdutosView ExibirExcluirProdutoAdministrar(int IdProduto)
        {
            ValidarId(IdProduto);

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ExibirExcluirProdutoAdministrar(IdProduto);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public ProdutosView ExibirExcluirProduto(int IdProduto)
        {
            ValidarId(IdProduto);

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ExibirExcluirProduto(IdProduto);
            }
            catch (Exception ex)
            {                
                throw ex;
            }
        }

        public List<SubCategoria> ListarSubCategoria(int IdCategoria)
        {
            List<SubCategoria> lista = new List<SubCategoria>(100);

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ListarSubCategoria(IdCategoria);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Produto> ListarBebidas(int IdSubCategoria)
        {
            List<Produto> lista = new List<Produto>();

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ListarProdutosSubCategoria(IdSubCategoria);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<SubCategoria> ListarSubCategoria()
        {
            List<SubCategoria> lista = new List<SubCategoria>();

            try
            {
                return FabricaRepositorio.RepositorioProdutos().ListarSubCategoria();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //public List<ProdutosView> BuscarProdutosPorBebidaEFormato(int IdBebida, int IdFormatoMedida)
        //{
        //    List<ProdutosView> produtoView = new List<ProdutosView>();

        //    try
        //    {
        //        produtoView = FabricaRepositorio.RepositorioProdutos().BuscarProdutosPorBebidaEFormato(IdBebida, IdFormatoMedida);
        //        return produtoView;                
        //    }
        //    catch (Exception)
        //    {
                
        //        throw;
        //    }
        //}

        public List<ProdutosView> BuscarProdutoPorId(int IdProduto)
        {
            List<ProdutosView> produtoView = new List<ProdutosView>();

            try
            {
                produtoView = FabricaRepositorio.RepositorioProdutos().BuscarProdutoPorId(IdProduto);
                return produtoView;
            }
            catch (Exception)
            {

                throw;
            }
        }

        public Retorno AlterarProdutoAdministrar(int IdProduto)
        {
            Retorno retorno = new Retorno();

            try
            {
                retorno.Objeto = FabricaRepositorio.RepositorioProdutos().AlterarProdutoAdministrar(IdProduto);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_004;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return retorno;
        }

        public Retorno AlterarProdutoAdministrar(AlterarProdutosModel produto)
        {
            Retorno retorno = new Retorno();

            try
            {
                if (!FabricaRepositorio.RepositorioProdutos().VerificaExisteProduto(produto.NomeProduto, produto.IdSubCategoria))
                {
                    retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().AlterarProdutoAdministrar(produto);

                    if (retorno.Sucesso)
                    {
                        retorno.Mensagem = Mensagens.MSG_005;
                    }
                    else
                    {
                        retorno.Sucesso = false;
                        retorno.Mensagem = Mensagens.MSG_004;
                    }
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_022;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return retorno; ;
        }

        public List<ProdutosView> ListarTodosProdutosAdministrar()
        {
            List<ProdutosView> lista = new List<ProdutosView>();
            Retorno retorno = new Retorno();

            return lista = FabricaRepositorio.RepositorioProdutos().ListarTodosProdutosAdministrar();
        }

        public Retorno RegistrarProdutosAdministrar(RegistrarProdutosModel produto)
        {
            Retorno retorno = new Retorno();
            try
            {
                if (!FabricaRepositorio.RepositorioProdutos().VerificaExisteProduto(produto.NomeProduto, produto.IdSubCategoria))
                {
                    retorno.Sucesso = FabricaRepositorio.RepositorioProdutos().RegistrarProdutosAdministrar(produto);

                    if (retorno.Sucesso)
                    {
                        retorno.Sucesso = true;
                        retorno.Mensagem = Mensagens.MSG_005;
                    }
                    else
                    {
                        retorno.Sucesso = false;
                        retorno.Mensagem = Mensagens.MSG_006;
                    }
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_022;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }
    }
}
